#include <signal.h>
#include <pthread.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

volatile sig_atomic_t g_signal_face = 0;
volatile sig_atomic_t g_signal_fatigue = 0;
/*
 *  函数名：sig_handler
 *  功能说明：信号处理函数，处理SIGUSR1和SIGUSR2信号
 *  参数：signal - 接收到的信号
 *  返回值：void
 *  日期：2025年3月
 */
void sig_handler(int signal)
{
    if(signal == SIGUSR1)   //人脸识别子进程发送来的信号，表明识别到工作人员
    {
        printf("receive SIGUSR1\n");
        g_signal_face = 1;
    }
    else if(signal == SIGUSR2)  //疲劳检测子进程发来的信号，表明疲劳等级过高
    {
        g_signal_fatigue = 1;
    }


}

/*
 *  函数名：setup_signal_handler
 *  功能说明：注册信号处理函数
 *  参数：无
 *  返回值：void
 *  日期：2025年3月
 */
void setup_signal_handler(void)
{
	struct sigaction act;
	memset(&act, 0, sizeof(act));
	act.sa_handler = sig_handler;
	act.sa_flags = SA_RESTART;

    const int signals[] = {SIGUSR1, SIGUSR2};
    for(int i = 0; i < sizeof(signals)/sizeof(int); i++)
    {
        if(sigaction(signals[i], &act, NULL) == -1){
            perror("sigaction err");
            exit(1);
        }
    }
}